package com.yn.courseselectionsystem.aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;

/**
 * @description: TODO
 * @author: Tokyo_God
 * @date: 2021/1/6 14:44
 * Role of:
 * @version: v1.0
 */
@Aspect
@Component
public class WebLogAspect {
    /**
     * 1*:访问修饰符
     * 2*那个类
     * 3*方法名
     * ..参数
     * @return
     */
    @Around("execution(* com.yn.courseselectionsystem.controller.*.*(..))")
    public Object around(ProceedingJoinPoint joinPoint){
        SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Object obj=null;
        //打印当前时间（当前调了方法）
        System.out.println("进入方法时间"+dateFormat.format(System.currentTimeMillis()));
        System.out.println("执行者的类名："+joinPoint.getTarget().getClass().getName());
        System.out.println("执行的方法名为："+joinPoint.getSignature().getName());
        try {
            obj=joinPoint.proceed();
            System.out.println("结束方法时间"+dateFormat.format(System.currentTimeMillis()));
            return obj;
        } catch (Throwable throwable) {
            System.out.println("进入异常");
            throwable.printStackTrace();
        }
        return obj;
    }


    /*@Pointcut("execution(* com.yn.courseselectionsystem.controller.*.*(..))")
    public void doPointcut(){}
*/
    /**
     * 进入方法时
     */
    /*@Before("execution(* com.yn.courseselectionsystem.controller.*.*(..))")
    public void doBefore(ProceedingJoinPoint joinPoint){
        SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //打印当前时间（当前调了方法）
        System.out.println("进入方法时间"+dateFormat.format(System.currentTimeMillis()));
        System.out.println("执行者的类名："+joinPoint.getTarget().getClass().getName());
        System.out.println("执行的方法名为："+joinPoint.getSignature().getName());
    }*/

    /**
     * 执行完方法时
     */
    /*@AfterReturning("execution(* com.yn.courseselectionsystem.controller.*.*(..))")
    public void doAfterReturning(ProceedingJoinPoint joinPoint){
        SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("结束方法时间"+dateFormat.format(System.currentTimeMillis()));
    }*/

}
